package com.app.base.fragment;


import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import com.caszx.chargingpile.R;
import http.okhttp.OkHttpUtils;

/**
 * 用于有网络交互的Fragment
 * 
 * 
 */
abstract class BaseNetFragment extends BaseFragment {

	protected ViewGroup rootView;
	protected View baseLoadView, baseErrorView, baseLoadedView,baseMesgView;
	protected abstract void showErrorView();
	protected abstract void showErrorView(String msg);
	protected abstract void showErrorView(int msg);
	

	/**
	 * 初始化的时候执行
	 * <p>
	 * <b>注意 : 只对于一进入就要取数据的Fragment，以为返回的View会在所有View之上
	 * 
	 * @return View 由Fragment的根布局（RelativeLayout）添加到自己里,xml里要使用merge标签
	 */
	protected abstract View initLoadView();

	/**
	 * 和initLoadView配合使用，如果出现网络错误就会执行该函数，
	 * 
	 *
	 * @return view 一个网络错误的请求页面
	 */
	protected abstract View initErrorView();

	/**
	 * 刚进入时,网络请求的入口
	 */
	protected abstract void onLoad();

	/**
	 * 对付空白页面，如果页面里没数据，可以调用
	 */
	protected  abstract void showMsgView(ViewGroup anchor,String msg);
	
	/**
	 * 只有目的数据取到后才会执行，需要子类自己重写该方法
	 * 
	 * @return view 数据与View绑定
	 */
	protected abstract View initOnloadedView();

	@Override
	public void onViewCreated(View view, Bundle savedInstanceState) {
		super.onViewCreated(view, savedInstanceState);
		onLoad();
	}

	@Override
	protected View initView() {
		rootView = new RelativeLayout(getActivity());
		rootView.setFocusable(true);
		rootView.setBackgroundColor(getResources().getColor(R.color.white));
		rootView.setFocusableInTouchMode(true);
		baseLoadView = initLoadView();
		return rootView;
	}

	protected ViewGroup getContentView() {
		return rootView;
	}

	protected View getBaseLoadView() {
		if(baseLoadView == null){
			baseLoadView = initLoadView();
		}
		return baseLoadView;
	}
	
	/**
	 * 
	 * 如果errorView没有初始化，先初始化，再返回
	 * 如果已经初始化就直接返回
	 * */
	protected View getBaseErrorView() {
		if (baseErrorView == null) {
			baseErrorView = initErrorView();
		}
		return baseErrorView;
	}

	/**
	 * 
	 * 如果onloadedView没有初始化，先初始化，再返回
	 * 如果已经初始化就直接返回
	 * @param isDirect  true 直接返回，可能会返回null，false 如果为null 先初始化，保证不会为null
	 * @return
	 */
	protected View getBaseLoadedView(boolean isDirect) {
		if (!isDirect&&baseLoadedView == null) {
			baseLoadedView = initOnloadedView();
		}
		return baseLoadedView;
	}

	protected View getBaseLoadedView() {
		return getBaseLoadedView(false);
	}
	
	
	/**
	 * 取消tag标签的请求
	 */
	protected void cancelAll(Object tag){
		OkHttpUtils.getInstance().cancelTag(tag);
		//RequestHttp.getRequestQueue().cancelAll(tag);
	}
	
	@Override
	public void onDestroy() {
		//cancelAll(TAG);
		cancelAll(this);
		super.onDestroy();
	}
	
	protected ProgressDialog progDialog = null;
	/**
	 * 隐藏进度框
	 */
	protected void dissmissProgressDialog() {
		if (progDialog != null) {
			progDialog.dismiss();
		} 
	}
	
	/**
	 * 显示进度框
	 */
	protected void showProgressDialog(String msg) {
		if (progDialog == null){
			progDialog = new ProgressDialog(getActivity());
			progDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
			progDialog.setIndeterminate(false);
			progDialog.setCancelable(false);
		}
		progDialog.setMessage(msg);
		progDialog.show();
	}
}
